package xyz.kail.demo.easyrules.hello.annotation;

import org.jeasy.rules.annotation.Action;
import org.jeasy.rules.annotation.Condition;
import org.jeasy.rules.annotation.Fact;
import org.jeasy.rules.annotation.Rule;
import org.jeasy.rules.api.Facts;

/**
 * <pre>
 * @Condition 注解标记计算规则条件的方法。此方法必须是公共的，可以有一个或多个用 @Fact 注解的参数，并返回布尔类型。只有一个方法能用 @Condition 注解。
 * @Action 注解标记要执行规则操作的方法。规则可以有多个操作。可以使用 order 属性按指定的顺序执行操作。默认情况下，操作的顺序为 0。
 * </pre>
 */
@Rule(name = "hello rule", description = "hello rule description", priority = 1)
public class HelloRule {

    /**
     * @Fact("fact") 必须到事实数据，否则规则无法执行
     */
    @Condition
    public boolean when(@Fact("fact") String fact) {
        return "hello".equals(fact);
    }

    @Action(order = 1)
    public void thenAction(Facts facts) throws Exception {
        //my actions
        System.out.println("thenAction：" + facts.toString());
    }

    @Action(order = 2)
    public void finallyAction() throws Exception {
        //my final actions
        System.out.println("finallyAction");
    }

}